{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73bd968b-d970-4a05-94ef-4e7abf990827",
   "metadata": {},
   "source": [
    "Chapter 09\n",
    "\n",
    "# 完全型QR分解\n",
    "《线性代数》 | 鸢尾花书：数学不难"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bd98ba2e-2822-45a5-b605-5850aac4ab26",
   "metadata": {},
   "source": [
    "这段代码从数学角度完整演示了**完全型 QR 分解（Complete QR Decomposition）**的结构性质与正交矩阵的基本性质，并借助热图可视化每一个关键矩阵的结构特征。\n",
    "\n",
    "---\n",
    "\n",
    "首先，代码生成一个形状为 $12 \\times 8$ 的随机实矩阵 $A$，即：\n",
    "$$\n",
    "A \\in \\mathbb{R}^{12 \\times 8}\n",
    "$$\n",
    "这意味着矩阵 $A$ 有 12 行、8 列，是一个列满秩的“高瘦型”矩阵。\n",
    "\n",
    "然后，执行 **完全型 QR 分解**：\n",
    "$$\n",
    "A = Q_c R_c\n",
    "$$\n",
    "其中：\n",
    "\n",
    "- $Q_c \\in \\mathbb{R}^{12 \\times 12}$ 是一个 **正交矩阵**，即满足：\n",
    "  $$\n",
    "  Q_c^T Q_c = Q_c Q_c^T = I_{12}\n",
    "  $$\n",
    "  它的前8列构成 $A$ 的列空间的一个正交基，其后4列构成其正交补（列空间的补空间），所以 $Q_c$ 是在标准 QR 分解基础上通过补全列向量而获得的 **完整正交矩阵**。\n",
    "\n",
    "- $R_c \\in \\mathbb{R}^{12 \\times 8}$ 是一个 **上三角矩阵**扩展为 $12$ 行的形式，只有前 $8$ 行是非零的上三角结构，下面是 $4$ 行全零。\n",
    "\n",
    "因此，$Q_c R_c$ 实现了对矩阵 $A$ 的完全型 QR 分解，不仅满足 $A = Q_c R_c$，而且使得 $Q_c$ 具备完备的正交基结构。\n",
    "\n",
    "---\n",
    "\n",
    "接下来代码对这些矩阵进行可视化：\n",
    "\n",
    "- 第一组图像展示了等式：\n",
    "  $$\n",
    "  A = Q_c R_c\n",
    "  $$\n",
    "  利用热图（Heatmap）显示矩阵 $A$、$Q_c$ 和 $R_c$ 的结构，从图像中我们可以看到 $Q_c$ 明显拥有正交结构（行列之间的颜色分布非常均衡），$R_c$ 具有明显的上三角特征（上半部分有颜色，下半部分接近零）。\n",
    "\n",
    "---\n",
    "\n",
    "第二部分是验证 $Q_c$ 的正交性。\n",
    "\n",
    "首先可视化：\n",
    "$$\n",
    "Q_c^T Q_c = I\n",
    "$$\n",
    "这表明矩阵 $Q_c$ 的列向量是单位正交的，即两两正交且每个向量范数为 $1$，这也是正交矩阵的核心定义。热图显示主对角线为红色（代表 $1$），其他元素为蓝色或白色（接近 $0$），正是单位矩阵的结构。\n",
    "\n",
    "然后反转顺序，再次验证：\n",
    "$$\n",
    "Q_c Q_c^T = I\n",
    "$$\n",
    "这进一步验证 $Q_c$ 的**行向量**也是单位正交的，说明 $Q_c$ 作为一个正交矩阵，其左乘和右乘均保持向量长度和角度不变。\n",
    "\n",
    "---\n",
    "\n",
    "整体来看，这段代码以图像方式清晰展示了：\n",
    "\n",
    "1. 完全型 QR 分解如何将任意矩阵分解为一个正交矩阵与一个上三角矩阵的乘积；\n",
    "2. 正交矩阵 $Q_c$ 的基本性质（左右乘转置都为单位矩阵）；\n",
    "3. 利用热图可视化帮助理解矩阵结构 —— 如正交矩阵的对称、稀疏、分布均匀等性质。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e13bd314-8cae-470d-ab76-f0d732c6c940",
   "metadata": {},
   "source": [
    "## 初始化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "56e73d69-318d-4046-9889-a7f60a28df17",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np  # 导入数值计算库\n",
    "import seaborn as sns  # 导入数据可视化库\n",
    "from matplotlib import pyplot as plt  # 导入绘图库"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6336fd3e-d094-4cd8-bf1a-b2d4396f100d",
   "metadata": {},
   "source": [
    "## 生成矩阵A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "dc2a246d-e54d-4a25-b4db-8ce06223a64c",
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(88888)\n",
    "A = np.random.randn(12, 8)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "038cfdf6-d1dd-49c7-823f-c7a0aebcf684",
   "metadata": {},
   "source": [
    "## 完全型QR分解"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "4860b21b-0a00-4c69-9b7c-a2cb06b3a43d",
   "metadata": {},
   "outputs": [],
   "source": [
    "Q_complete, R_complete = np.linalg.qr(A, mode='complete')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c4b72971-34eb-482f-9aa1-9ec3751dc8d1",
   "metadata": {},
   "source": [
    "## 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "c6a28949-29f3-4cda-8bb5-00763aa31c79",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Rc')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x300 with 8 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1, 5, figsize=(12, 3))  # 创建子图\n",
    "\n",
    "plt.sca(axs[0])\n",
    "ax = sns.heatmap(A, cmap='bwr', vmax=2.5, vmin=-2.5,  # 绘制矩阵 X 的热图\n",
    "                 linecolor = 'k',linewidths = 0.1,\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"})\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('A')\n",
    "\n",
    "plt.sca(axs[1])\n",
    "plt.title('=')  # 绘制等号\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[2])\n",
    "ax = sns.heatmap(Q_complete, cmap='bwr', vmax=2.5, vmin=-2.5,  # 绘制完整正交矩阵 Qc 的热图\n",
    "                 linecolor = 'k',linewidths = 0.1,\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"})\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('Qc')\n",
    "\n",
    "plt.sca(axs[3])\n",
    "plt.title('@')  # 绘制乘号\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[4])\n",
    "ax = sns.heatmap(R_complete, cmap='bwr', vmax=2.5, vmin=-2.5,  # 绘制上三角矩阵 Rc 的热图\n",
    "                 linecolor = 'k',linewidths = 0.1,\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"})\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('Rc')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d44692d4-f279-43a7-8ed9-44e72ba1ba64",
   "metadata": {},
   "source": [
    "## Q为正交矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "0cbcfb02-23a0-46f2-a905-283f7e57e991",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Qc')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x300 with 8 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1, 5, figsize=(12, 3))  # 创建子图\n",
    "\n",
    "plt.sca(axs[0])\n",
    "ax = sns.heatmap(Q_complete.T @ Q_complete, cmap='bwr', vmax=2.5, vmin=-2.5,  # 绘制 Qc.T @ Qc 的热图\n",
    "                 linecolor = 'k',linewidths = 0.1,\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"})\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('I')\n",
    "\n",
    "plt.sca(axs[1])\n",
    "plt.title('=')  # 绘制等号\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[2])\n",
    "ax = sns.heatmap(Q_complete.T, cmap='bwr', vmax=2.5, vmin=-2.5,  # 绘制 Qc.T 的热图\n",
    "                 linecolor = 'k',linewidths = 0.1,\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"})\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('Qc.T')\n",
    "\n",
    "plt.sca(axs[3])\n",
    "plt.title('@')  # 绘制乘号\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[4])\n",
    "ax = sns.heatmap(Q_complete, cmap='bwr', vmax=2.5, vmin=-2.5,  # 绘制 Qc 的热图\n",
    "                 linecolor = 'k',linewidths = 0.1,\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"})\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('Qc')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "97d4884a-d8e4-439c-a1d0-a1af76a11a9d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Qc.T')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x300 with 8 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1, 5, figsize=(12, 3))  # 创建子图\n",
    "\n",
    "plt.sca(axs[0])\n",
    "ax = sns.heatmap(Q_complete @ Q_complete.T, cmap='bwr', vmax=2.5, vmin=-2.5,  # 绘制 Qc.T @ Qc 的热图\n",
    "                 linecolor = 'k',linewidths = 0.1,\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"})\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('I')\n",
    "\n",
    "plt.sca(axs[1])\n",
    "plt.title('=')  # 绘制等号\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[2])\n",
    "ax = sns.heatmap(Q_complete, cmap='bwr', vmax=2.5, vmin=-2.5,  # 绘制 Qc.T 的热图\n",
    "                 linecolor = 'k',linewidths = 0.1,\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"})\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('Qc')\n",
    "\n",
    "plt.sca(axs[3])\n",
    "plt.title('@')  # 绘制乘号\n",
    "plt.axis('off')\n",
    "\n",
    "plt.sca(axs[4])\n",
    "ax = sns.heatmap(Q_complete.T, cmap='bwr', vmax=2.5, vmin=-2.5,  # 绘制 Qc 的热图\n",
    "                 linecolor = 'k',linewidths = 0.1,\n",
    "                 cbar_kws={\"orientation\": \"horizontal\"})\n",
    "ax.set_aspect(\"equal\")\n",
    "plt.title('Qc.T')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "acdcf346-f5ca-43ca-8a8b-8b219cda01bb",
   "metadata": {},
   "source": [
    "作者\t**生姜DrGinger**  \n",
    "脚本\t**生姜DrGinger**  \n",
    "视频\t**崔崔CuiCui**  \n",
    "开源资源\t[**GitHub**](https://github.com/Visualize-ML)  \n",
    "平台\t[**油管**](https://www.youtube.com/@DrGinger_Jiang)\t\t\n",
    "\t\t[**iris小课堂**](https://space.bilibili.com/3546865719052873)\t\t\n",
    "\t\t[**生姜DrGinger**](https://space.bilibili.com/513194466)  ·"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
